/* 
    字符串去重
*/
{
  /**
   * 循环存放字符到结果字符串中, 如果字符不存在于结果字符串中才存放
   * @param {*} str
   * @returns
   */
  const strUnique = (str) => {
    let result = "";
    for (let i = 0; i < str.length; i++) {
      let char = str.charAt(i);
      if (result.indexOf(char) === -1) {
        result += char;
      }
    }
    return result;
  };
  const str = "cjcjcjiang";
  console.log(strUnique(str));
}

{
  /**
   * 利用数组的filter过滤, 将每个字符索引和对应字符第一次出现的索引不同的过滤掉(说明重复出现了)
   * @param {*} str
   * @returns
   */
  const strUnique = (str) => {
    const result = Array.prototype.filter.call(str, (char, index) => {
      /**
       *  cjcjcjiang
       *  第一次遍历: c的indexOf = 0, index = 0
       *  第二次遍历: j的indexOf = 1, index = 1
       *  第三次遍历: c的indexOf = 0, index = 2; ==>两者不匹配, 那说明c第一次出现的位置是0, 再次出现的位置为2, 即为重复字符
       * */
      return str.indexOf(char) === index;
    });
    return result.join("");
  };
  const str = "cjcjcjiang";
  console.log(strUnique(str));
}

{
  /**
   * 利用ES6的Set
   *
   * @param {*} str
   */
  const strUnique = (str) => {
    /**
     * Set里面不存在重复元素, 可以将数组放在里面进行过滤掉重复元素
     */
    return [...new Set(str.split(""))].join("");
  };
  const str = "cjcjcjiang";
  console.log(strUnique(str));
}
